package net.zoneland.knowledge.service;

import net.zoneland.knowledge.exceptions.WorkSharedEditingException;
import net.zoneland.knowledge.model.LoginUserPojo;
import net.zoneland.knowledge.model.WorkApplyInfo;
import net.zoneland.knowledge.model.WorkApplyInfoAttachment;
import net.zoneland.oadocs.sdk.pojo.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * sdk服务.
 *
 * @author: cxz
 * 2023/3/27
 */
public interface OaDocsSdkService {

    /**
     * 构建访问文档协作平台的key.
     * @return 返回访问文档协作平台的key.
     */
    String getAppKey() throws WorkSharedEditingException;

    /**
     * 上传文件.
     * @param paramList 文件信息列表
     * @param fileList 文件名列表.
     * @return 返回调用oa文档协作信息文件上传接口成功还是失败，以及相关的文件信息.
     */
    List<DocDetailInfo> upload(final List<DocUploadRequest> paramList, final List<DocFileRequest> fileList);


    /**
     * 上传文件.
     * @param workApplyInfoAttachment 工单附件信息.
     */
    void uploadFile(final WorkApplyInfoAttachment workApplyInfoAttachment);

    /**
     * 获取在线编辑链接.
     *
     * @param userId 用户id
     * @param id 附件id
     * @return 返回获取到的在线编辑对象信息.
     */
    DocResult<String> queryOnlineEditClientLink(final String userId, final String id);


    /**
     * 查询下载链接.
     * @param fileId 文件id
     * @return 返回的下载链接有限期一小时，过期要重新获取
     */
    DocResult<String> queryDownloadLink(final String fileId);

    /**
     * 创建空文件夹.
     * @param folderName 文件名称.
     * @return 创建文件夹成功还是失败以及生成的文件夹信息.
     */
    DocResponseInfo createFolder(final String folderName) throws WorkSharedEditingException;

    /**
     * 初始化工单模板附件信息.
     * @param request 请求.
     * @param info 工单信息.
     * @param user 登录用户信息.
     */
    void initWorkApplyInfoTemplateAttachments(final HttpServletRequest request, final WorkApplyInfo info, final LoginUserPojo user);

    /**
     * 更新附件表的wpsFileId.
     * @param id 附件表信息id.
     * @param wpsFileId oa文档协作系统的文件id.
     */
    void updateWorkAttachmentWpsFileId(final String id, final String wpsFileId);

    /**
     * 更新附件表信息.
     * @param workApplyInfoAttachment 工单附件信息.
     */
    void updateWorkAttachment(final WorkApplyInfoAttachment workApplyInfoAttachment);

    /**
     * 激活用户账号.
     * @param userIds 用户账号列表.
     */
    void activeAccountBatch(final List<String> userIds);

}
